package cliente;

//RmiCliente.java
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.UnknownHostException;
import java.rmi.*;
//import java.rmi.registry.*;
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import objetoRemoto.*;



/**
 * @author casidiablo
 * 
 */
public class RmiCliente extends JFrame implements ActionListener {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private JTextField cajaEnviar;

	private JButton botonEnviar;

	private JLabel estado;

	private static InterfazReceptorMensajes rmiServidor;

	//private static Registry registro;

	//private static String direccionServidor = "192.168.1.22";

	private static String puertoServidor = "3232";

	public RmiCliente() {
		super("Cliente RMI");
		getContentPane().setLayout(new BorderLayout());
		cajaEnviar = new JTextField();
		cajaEnviar.addActionListener(this);
		botonEnviar = new JButton("Enviar");
		botonEnviar.addActionListener(this);
		estado = new JLabel("Estado...");

		getContentPane().add(cajaEnviar);
		getContentPane().add(botonEnviar, BorderLayout.EAST);
		getContentPane().add(estado, BorderLayout.SOUTH);

		setSize(300, 100);
		setVisible(true);
	}

	public void actionPerformed(ActionEvent e) {
		if (!cajaEnviar.getText().equals("")) {
			try {
				enviarMensaje(cajaEnviar.getText());
			} catch (UnknownHostException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (MalformedURLException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
			cajaEnviar.setText("");
		}
	}
	
	public boolean getStub() throws UnknownHostException, MalformedURLException {
    	boolean ok = false;
    	try {//implemento la interfaz en base al objeto remoto
    		String ip  = InetAddress.getLocalHost().toString()+":"+puertoServidor;
    		//(InterfazRemota)Naming.lookup ("//localhost/ObjetoRemoto")
    		rmiServidor = (InterfazReceptorMensajes)Naming.lookup(ip);
    		System.out.println ("me conecte!!!");//Obtengo el objeto remoto
			//ClienteRun.panelCentral.getDisplay().setText("Me conecte al servidor RMI");
			ok = true;
    	} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		return ok;
    }
	/*
	private static void conectarseAlServidor() {
		try {
			// obtener el registro
			registro = LocateRegistry.getRegistry(direccionServidor,
					(new Integer(puertoServidor)).intValue());
			// creando el objeto remoto
			rmiServidor = (InterfazReceptorMensajes) (registro
					.lookup("rmiServidor"));
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
	}*/

	private void enviarMensaje(String mensaje) throws UnknownHostException, MalformedURLException {
		estado.setText("Enviando " + mensaje + " a " + InetAddress.getLocalHost().toString() + ":"
				+ puertoServidor);
		System.out.println (mensaje);
		try {
			//if (getStub()){
				// llamando el metodo remoto
				System.out.println ("entre al stub");
				String ip  = InetAddress.getLocalHost().toString()+":"+puertoServidor;
	    		//(InterfazRemota)Naming.lookup ("//localhost/ObjetoRemoto")
	    		rmiServidor = (InterfazReceptorMensajes)Naming.lookup(ip);
				rmiServidor.recibirMensaje(mensaje);
				estado.setText("El mensaje se ha enviado!!!");
			//}
			
		} catch (RemoteException re) {
			re.printStackTrace();
		} catch (NotBoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	static public void main(String args[]) {
		System.setProperty("java.security.policy", "rmi.policy");
        System.setSecurityManager( new RMISecurityManager() );
		JFrame.setDefaultLookAndFeelDecorated(true);
		//conectarseAlServidor();
		RmiCliente ventana = new RmiCliente();
		ventana.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
}
